/// 本地线程。类似java中的ThreadLocal。
/// 每个操作线程都拥有数据的副本。

thread_local! {
    static MY_THREAD_LOCAL: String = "Hello, thread_local".to_string();
}

fn main() {
    // 启动两个线程
    let t1 = std::thread::spawn(|| {
        // 在第一个线程中访问线程局部变量并打印其值
        println!("Thread 1: {}", MY_THREAD_LOCAL.with(|s| s.clone()));
    });

    let t2 = std::thread::spawn(|| {
        // 在第二个线程中修改线程局部变量的值
        MY_THREAD_LOCAL.with(|s| {
            let ss = s.replace("Hello", "你好");
            println!("{}", ss);
        });
    });

    // 等待线程结束
    t1.join().unwrap();
    t2.join().unwrap();

    // 在主线程中访问线程局部变量并打印其值
    println!("Main thread: {}", MY_THREAD_LOCAL.with(|s| s.clone()));
}
